package exception;

import java.io.FileOutputStream;
import java.io.IOException;

/**
 * JDK7之后，推出了一个新的特性:自动关闭
 * 使得我们在异常处理机制中简化了对IO的关闭操作
 * 语法:
 * try(
 *      这里初始化会在finally中调用close方法关闭的类.
 * ){
 *      ......
 * }(XXXException e){
 *     ......
 * }
 *
 * 该特性 是编译器认可的，并非虚拟机。编译器将源代码编译为close文件后改为在finally中进行close.
 */
public class AutCloseableDemo {
    public static void main(String[] args) {

        try (
                /*
                    Java中所以得流都是实现了AutoCloseable接口，声明在这里的变量最终会被编译器
                    改为在finally中调用其close方法关闭，相当于改为FinallyDemo2案例的样子.
                 */
                FileOutputStream fos = new FileOutputStream("bos.dat");
                ){
            String line = "";//只有实现了AutoCloseable接口的类才能在这里定义.
            fos.write(2);
//            fos.close();//在()里书写了可以调用close方法的,可以不写
        } catch (IOException e) {
            e.printStackTrace();
        }


//      //案例
//        FileOutputStream fos = null;
//        try {
//            fos = new FileOutputStream("fob.txt");
//            fos.write(1);
//            System.out.println("你好！");
//        } catch (IOException e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                if(fos!=null) {
//                    fos.close();
//                    System.out.println("执行结束!");
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }



    }
}
